package com.exam.dao.student;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Repository;

import com.exam.common.vo.ExamStuVO;
import com.exam.common.vo.page.PageModel;
import com.exam.common.vo.page.SystemContext;
import com.exam.dao.base.BaseDaoImpl;
import com.exam.entity.ExamStu;

@Repository("studentDaoImp")
public class StudentDaoImp extends BaseDaoImpl<ExamStu> implements StudentDao {

	@SuppressWarnings("unchecked")
	@Override
	public PageModel<ExamStuVO> findByPage() throws Exception{
		int offset = SystemContext.getOffset();
		int pageSize = SystemContext.getPageSize();
		List<ExamStuVO> datas = new ArrayList<ExamStuVO>();
		//System.out.println(offset);
		PageModel<ExamStuVO> page = new PageModel<ExamStuVO>();
		List<ExamStu> tempDatas = this.getSession().createQuery(" from ExamStu ")
				.setFirstResult(offset).setMaxResults(pageSize)
				.list();
		for(ExamStu stu:tempDatas){
			ExamStuVO stuVO = new ExamStuVO();
			BeanUtils.copyProperties(stu, stuVO);
			String sex = String.valueOf(stuVO.getExamStuSex()).equals("M")?"Male":"Female";
			stuVO.setExamStuSex(sex);
			datas.add(stuVO);
		}
		long totalSize = (long) this.getSession().createQuery(" select Count(*) from ExamStu ").uniqueResult();
		page.setTotalSize(totalSize);
		page.setDatas(datas);
		page.setOffset(offset);
		page.setPageSize(pageSize);
		return page;
	}

	@Override
	public ExamStuVO findByStuNumber(String stuNumber) {
		ExamStuVO stuVO = new ExamStuVO();
		ExamStu stu = (ExamStu) this.getSession().createQuery(" from ExamStu where examStuNumber=:stuNumber")
				.setParameter("stuNumber", stuNumber).uniqueResult();
		if(stu!=null){
			BeanUtils.copyProperties(stu, stuVO);
		}else{
			stuVO = null;
		}
		return stuVO;
	}

	@SuppressWarnings("unchecked")
	@Override
	public PageModel<ExamStuVO> findBySearchTip(String searchTip) {
		PageModel<ExamStuVO> page = new PageModel<ExamStuVO>();
		String hql = "from ExamStu where examStuName like '%"+searchTip+"%' or examStuNumber like '%"
				+searchTip+"%' or examStuId like '%"+searchTip+"%'";
		
		int offset = SystemContext.getOffset();
		int pageSize = SystemContext.getPageSize();
		
		List<ExamStuVO> datas = new ArrayList<ExamStuVO>();
		
		List<ExamStu> templateData = this.getSession().createQuery(hql)
				.setFirstResult(offset).setMaxResults(pageSize).list();
		for(ExamStu stu:templateData){
			ExamStuVO stuVO = new ExamStuVO();
			BeanUtils.copyProperties(stu, stuVO);
			datas.add(stuVO);
		}
		
		List<ExamStuVO> temp = this.getSession().createQuery(hql).list();
		
		page.setTotalSize(temp.size());
		page.setOffset(offset);
		page.setPageSize(pageSize);
		page.setDatas(datas);
		
		return page;
	}

	@SuppressWarnings("unchecked")
	@Override
	public PageModel<ExamStuVO> findBySearchType(String[] num, String searchType) {
		PageModel<ExamStuVO> page = new PageModel<ExamStuVO>();	
		StringBuffer sb = new StringBuffer();
		
		sb.append(" from ExamStu  where 1=1 ");
		
		for(String n:num){
			if(n.trim().equals("1") | n.trim() == "1"){
				sb.append(" and examStuId like '%"+searchType+"%' ");
			}else if (n.trim().equals("2") | n.trim() == "2"){
				sb.append(" and examStuName like '%"+searchType+"%' ");
			}else if (n.trim().equals("3") | n.trim() == "3"){
				sb.append(" and examStuNumber like '%"+searchType+"%' ");
			}else{
				sb.append(" and ( examStuId like '%"+searchType+"%' ");
				sb.append(" or examStuName like '%"+searchType+"%' ");
				sb.append(" or examStuNumber like '%"+searchType+"%') ");
			}
		}
		System.out.println(sb.toString());
		
		int offset = SystemContext.getOffset();
		int pageSize = SystemContext.getPageSize();
		
		List<ExamStuVO> datas = new ArrayList<ExamStuVO>();
		
		List<ExamStu> templateData = this.getSession().createQuery(sb.toString())
				.setFirstResult(offset).setMaxResults(pageSize).list();
		for(ExamStu stu:templateData){
			ExamStuVO stuVO = new ExamStuVO();
			BeanUtils.copyProperties(stu, stuVO);
			datas.add(stuVO);
		}
		
		List<ExamStuVO> temp = this.getSession().createQuery(sb.toString()).list();
		
		page.setTotalSize(temp.size());
		page.setOffset(offset);
		page.setPageSize(pageSize);
		page.setDatas(datas);
		
		return page;
	}
	
}
